home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 280_01 / unique.c < prev    next >
Text File  |  1989-01-11  |  2KB  |  91 lines

  1. /* [UNIQUE.C of JUGPDS Vol.46]*/
  2. /*
  3. *****************************************************************
  4. *                                *
  5. *    Written by  Hakuo Katayose (JUG-CP/M No.179)        *
  6. *            49-114 Kawauchi-Sanjuunin-machi        *
  7. *            Sendai, Miyagi 980                          *
  8. *            Phone: 0222-61-3219                *
  9. *                                *
  10. *       Modifird by Toshiya Oota   (JUG-CPM No.10)              *
  11. *                   Sakae ko-po 205                 *
  12. *            5-19-6 Hosoda                *
  13. *            Katusikaku Tokyo 124            *
  14. *                                *
  15. *        for MS-DOS Lattice C V3.1J & 80186/V20/V30    *
  16. *                                *
  17. *    Compiler Option: -ccu -k0(1) -ms -n -v -w        *
  18. *                                *
  19. *    Edited & tested by Y. Monma (JUG-CP/M Disk Editor)    *
  20. *            &  T. Ota   (JUG-CP/M Sub Disk Editor)    *
  21. *                                *
  22. *****************************************************************
  23. */
  24.  
  25. /* unique - strip adjacent duplicate lines */
  26.  
  27. #include "stdio.h"
  28. #include "dos.h"
  29. #include "tools.h"
  30. #include "toolfunc.h"
  31.  
  32. #define LINES 10000
  33.  
  34. char    opt_d;        /* dictionary order */
  35. char    opt_f;        /* fold order        */
  36. char    opt_n;        /* counter option   */
  37.  
  38. void main(argc, argv)
  39. char    **argv;
  40. {
  41. char    buf1[MAXLINE], buf2[MAXLINE];
  42. int    i, len;
  43. unsigned wcount;
  44. char *ap, sub[8][16];
  45.  
  46.    opt_d = opt_f = opt_n = OFF;
  47.    i = 0;
  48.    while(--argc > 0)
  49.     if ( (*++argv)[0] == '-')
  50.         for (ap = argv[0]+1; *ap != '\0'; ap++)
  51.         switch( toupper(*ap) ) {
  52.             case 'D':
  53.             opt_d = ON;
  54.             break;
  55.             case 'F':
  56.             opt_f = ON;
  57.             break;
  58.             case 'N':
  59.             opt_n = ON;
  60.             break;
  61.         }
  62.     else
  63.         strcpy(sub[i++], *argv);
  64.     len = getlin(buf2, MAXLINE);
  65.     while( len > 0 ) {
  66.     strcpy(buf1, buf2);
  67.     wcount = 1;
  68.     while( (len = getlin(buf2, MAXLINE)) > 0 ) {
  69.         if( opt_d == ON && opt_f == ON ) {
  70.         if (strdfcmp( buf1, buf2) != 0)
  71.             break;
  72.         }
  73.         else if( opt_d == ON ) {
  74.             if (strdcmp( buf1, buf2) != 0)
  75.             break;
  76.         }
  77.         else if( opt_f == ON ) {
  78.             if (strfcmp( buf1, buf2) != 0)
  79.             break;
  80.         }
  81.         else if (strcmp( buf1, buf2) != 0)
  82.             break;
  83.         wcount++;
  84.         }
  85.         if( opt_n == ON )
  86.         printf( "%6d: %s", wcount, buf1);
  87.         else
  88.         printf( "%s", buf1 );
  89.     }
  90. }
  91.